Запрет LDAP-аутентификации с просроченным паролем

До версии ALD Pro 3.2.0 пользователи могли осуществлять аутентификацию LDAP (bind operation в 389 DS) после истечения срока действия их пароля. Поскольку все пароли имеют срок действия, пользователю необходимо было предоставить возможность пройти аутентификацию для сброса пароля. Поэтому ранее позволялось проводить неограниченное количество LDAP-аутентификаций вне зависимости от истечения срока действия пароля.

Предоперационный плагин для отклонения аутентификации LDAP после истечения срока действия пароля

Начиная с 3.2.0 в ALD Pro добавлен предоперационный плагин (pre-operation plugin), добавляющий механизм для отклонения аутентификации LDAP (BIND) после истечения срока действия пароля пользователя.

В политики паролей добавлен новый атрибут passwordGraceLimit.

Диапазон возможных значений от 0 до MAXINT (где MAXINT - максимальное натуральное число, которое поддерживает 389 DS). Если атрибут в политике паролей не задан явно (отсутствует в записи политики паролей), то он считается равным 0. Если атрибут задан явно и равен какому-то натуральному числу, то он определяет количество разрешенных BIND-аутентификаций пользователя после истечения срока действия пароля этого пользователя.

По умолчанию, при разворачивании инфраструктуры с нуля значение параметра passwordGraceLimit в парольной политике Global Policy устанавливается = 3.

По умолчанию, при обновлении до ALD Pro версии 3.2.0 с предыдущих версий значение параметра passwordGraceLimit в парольной политике Global Policy, а также ранее созданных политиках паролей устанавливается = 3.

При создании политики паролей на ПУ ALD Pro значение параметра passwordGraceLimit в создаваемых новых парольных политиках устанавливается = 3.

Для использования возможностей, предоставляемых атрибутом passwordGraceLimit можно воспользоваться установкой определенного значения в глобальной политике паролей. Для этого необходимо получить билет Kerberos в сеансе пользователя, который имеет право выполнять команду ipa и затем выполнить следующую команду для установки лимита количества аутентификаций для глобальной политики паролей (для примера, в значение 3):

ipa pwpolicy-mod --setattr=passwordgracelimit=3

После успешного выполнения этой команды и установки значения атрибута passwordgracelimit в значение 3 всем пользователям, на которых распространяется действие этой политики, после окончания срока действия их пароля можно будет осуществить не более 3 успешных попыток LDAP-аутентификации.

Установка значения 0 (оно же значение, когда атрибут отсутствует) приведет к невозможности успешной LDAP аутентификации пользователя после окончания срока действия пароля.

Для изменения значения атрибута passwordGraceLimit в политиках паролей, отличных от глобальной следует выполнить следующую команду:

ldapmodify -h <хост> -p <порт> -D "<DN_админа>" -W <<EOF
dn: <DN_вашей_парольной_политики>
changetype: modify
replace: passwordGraceLimit
passwordGraceLimit: 5
EOF

В алгоритме работы разработанного плагина помимо атрибута passwordGraceLimit политик паролей также проверяется (изменяется) значение операционного атрибута passwordGraceUserTime в учетной записи пользователя.

Механизм работы предоперационного плагина

Основной алгоритм работы плагина:

  1. Плагин срабатывает при попытке операции BIND в 389 DS;

  2. Из запроса на BIND получается DN той учетной записи, под которой происходит подключение к 389 DS;

  3. Проверяется срок действия пароля для DN из предыдущего пункта, если срок действия пароля истек, то запускаются дальнейшие проверки, если не истек, то подключение продолжается без задействования плагина;

  4. Получается политика паролей для DN с просроченным сроком действия пароля;

  5. Если значение атрибута passwordgracelimit в полученной политике на предыдущем шаге равно 0 или атрибут отсутствует, то аутентификация запрещается и выдается ошибка: ldap_bind: Invalid credentials (49)  additional info: Password is expired., если это не так, то плагин продолжает работу и переходит к следующей проверке;

  6. Если значение атрибута passwordgracelimit из политики паролей, действующей на подключающуюся к 389 DS учетную запись пользователя, больше текущего значения операционного атрибута passwordGraceUserTime в подключающейся учетной записи пользователя, то тогда подключение продолжается успешно, а плагин увеличивает на единицу значение значение операционного атрибута passwordGraceUserTime, в противном случае аутентификация запрещается с выдачей такой же ошибки, как на предыдущем шаге.

В случае успешного сброса пароля для учетной записи пользователя значение операционного атрибута passwordGraceUserTime для этой учетной записи пользователя устанавливается равным 0. Для сброса пароля пользователю можно использовать как средства командной строки или web-интерфейс FreeIPA, так и соответствующее API или портал управления ALD Pro (пользователь, который осуществляет сброс пароля другой учетной записи, должен обладать необходимой для этого действия привилегией).

Привилегия для чтения данных в политиках паролей (в том числе позволяет читать атрибут passwordgracelimit у политик): Password Policies - Read.

Привилегия для внесения изменений в политики паролей (в том числе позволяет вносить изменения в атрибут passwordgracelimit у политик): Password Policies - Modify.

Вышеуказанные привилегии входят в предустановленную роль ALDPRO - Password Policies Administrators.

Дополнительно, привилегия Password Policies - Read входит в предустановленную роль Password Policies - Read. Данные роли являются пользовательскими и открыты для изменения администратору ролей (домена).

Если пользователь является прямым или косвенным участником группы admins, то в этом случае вне зависимости от наличия вышеуказанных привилегий он может совершать любые действия с политиками паролей через интерфейс FreeIPA (web или cli).